(function ($) {
    /**
     * 更新下拉框值（页面）
     * @param {string} key - 下拉框名称
     * @param {string} value - 选项值
     */
    function toggleSelect(key, value) {
        const $select = $(`select[name="${key}"]`);
        if($select.length === 0) {
            console.error(`[module] 未找到下拉框控件: #${key}`);
            return;
        }
        $select.val(value);
    }

    /**
     * 更新下拉框值（本地存储）
     * @param {string} key - 下拉框名称
     */
    function updateSelectToLocalStorage(key){
        const selectResult = window.getSettingsFromUserSettings(key, 'select');
        // 方括号包裹变量名，才能将变量作为对象的键名，不然会直接使用 key 作为属性名
        window.AppUtils.updateLocalStorage('userSettings', {select: {[key]: selectResult}});
    }

    /**
     * 监听所有下拉框选择事件
     */
    function bindSelectEvents(config) {
        config.forEach(name => {
            $(`select[name="${name}"]`).on('change', function ()  {
                const value = $(this).val();
                updateSelectToLocalStorage(name);
                if (name === 'cursorTheme') {
                    window.updateCursorTheme(value);
                }
            });
        });
    }

    /**
     * 初始化所有下拉框值（页面）
     */
    function bindInitSelect(config) {
        config.forEach(name => {
            const value = window.getSettingsFromUserSettings(name, 'select');
            toggleSelect(name, value);
            if (name === 'cursorTheme') {
                window.updateCursorTheme(value);
            }
        });
    }

    function initSelect() {
        bindInitSelect(window.selectConfigs);
        bindSelectEvents(window.selectConfigs);
    }

    window.initSelect = initSelect;
})(window.jQuery);